package com.it.jdk8_time;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Test_LocalDateTime {
    public static void main(String[] args) {
        // 0.获取本地日期和时间的全部信息
        LocalDateTime ldt = LocalDateTime.now(); // 年 月 日 时 分 秒 纳秒 不可变的
        System.out.println(ldt);

        // 1.可以获取日期和时间的全部信息

        int year = ldt.getYear(); // 年
        System.out.println(year + "年");

        int month = ldt.getMonthValue(); // 月(1-12)
        System.out.println(month + "月");

        int day = ldt.getDayOfMonth(); // 日
        System.out.println(day + "日");

        int dayOfYear = ldt.getDayOfYear(); // 一年中的第几天
        System.out.println("一年中的第" + dayOfYear + "天");

        int dayOfWeek = ldt.getDayOfWeek().getValue(); // 星期几
        System.out.println("星期" + dayOfWeek);

        int hour = ldt.getHour(); // 时
        System.out.println(hour);

        int minute = ldt.getMinute();// 分
        System.out.println(minute);

        int second = ldt.getSecond();// 秒
        System.out.println(second);

        int nano = ldt.getNano();// 纳秒
        System.out.println(nano);

        System.out.println("-----------------------------------");

        // 2、修改时间信息：
        // withYear、withMonth、withDayOfMonth、withDayOfYear、
        // withHour、withMinute、withSecond、withNano
        LocalDateTime ld2 = ldt.withYear(2099); // 把年改成2099年
        System.out.println(ld2);

        LocalDateTime ld3 = ldt.withMonth(12); // 把月改成12月
        System.out.println(ld3);

        System.out.println(ldt); // 当前日期

        LocalDateTime lt3 = ldt.withHour(10); // 把小时改成10
        System.out.println(lt3);

        LocalDateTime lt4 = ldt.withMinute(10); // 把分钟改成10
        System.out.println(lt4);

        LocalDateTime lt5 = ldt.withSecond(10); // 把秒改成10
        System.out.println(lt5);

        LocalDateTime lt6 = ldt.withNano(10); // 把纳秒改成10
        System.out.println(lt6);
        System.out.println("-----------------------------------");

        // 3、加多少：
        // plusYears、PlusMonths、plusDays、plusWeeks、
        // plusHours、plusMinutes、PlusSeconds、PlusNanos
        LocalDateTime ld4 = ldt.plusYears(2); // 加2年
        System.out.println(ld4);

        LocalDateTime ld5 = ldt.plusMonths(2); // 加2月
        System.out.println(ld5);

        LocalDateTime lt7 = ldt.plusHours(10); // 加10小时
        System.out.println(lt7);

        LocalDateTime lt8 = ldt.plusMinutes(10); // 加10分钟
        System.out.println(lt8);

        LocalDateTime lt9 = ldt.plusSeconds(10); // 加10秒
        System.out.println(lt9);

        LocalDateTime lt10 = ldt.plusNanos(10); // 加10纳秒
        System.out.println(lt10);
        System.out.println("——————————————————————————————————————————————");

        // 4、减多少：
        // minusYears、minusMonths、minusDays、minusWeeks、
        // minusHours、minusMinutes、minusSeconds、minusNanos
        LocalDateTime ld6 = ldt.minusYears(2); // 减2年
        System.out.println(ld6);

        LocalDateTime ld7 = ldt.minusMonths(2); // 减2月
        System.out.println(ld7);

        LocalDateTime lt11 = ldt.minusHours(10);
        System.out.println(lt11);

        LocalDateTime lt12 = ldt.minusMinutes(10);
        System.out.println(lt12);

        LocalDateTime lt13 = ldt.minusSeconds(10);
        System.out.println(lt13);

        LocalDateTime lt14 = ldt.plusNanos(10);
        System.out.println(lt14);
        System.out.println("——————————————————————————————————————————————");

        // 5.获取指定时间的LocalTime对象
//        public static LocalTime of(int year, int month, int dayOfMonth,int hour,int time,int second)
        LocalDateTime lt15 = LocalDateTime.of(2099, 12, 12, 12, 12, 12, 0000001);
        System.out.println(lt15);

        LocalDateTime lt16 = LocalDateTime.of(2099, 12, 12, 12, 12, 12);
        System.out.println(lt16);
        System.out.println("——————————————————————————————————————————————");

        // 6.判断2个时间对象，是否相等，在前还是在后：equals isBefore isAfter
        System.out.println(lt15.equals(lt16));
        System.out.println(lt15.isAfter(ldt));
        System.out.println(lt15.isBefore(ldt));

        // 7.可以把LocalDateTime转换成LocalDate和LocalTime
        // public LocalDate toLocalDate()
        // public LocalTime toLocalTime()
        // public static LocalDateTime of(LocalDate date, LocalTime time)

        LocalDate ld = ldt.toLocalDate();
        System.out.println(ld);

        LocalTime lt = ldt.toLocalTime();
        System.out.println(lt);

        LocalDateTime ldt10 = LocalDateTime.of(ld, lt);
        System.out.println(ldt10);
    }
}
